home *** CD-ROM | disk | FTP | other *** search
-
- Listing 3:
-
- /* complex hyperbolic sine routine intended to test
- argument passing and function returns only. This
- version passes doubles to a function which obtains
- memory using malloc() and returns pointers to that
- memory. */
-
- #include <dos.h>
- #include <math.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
-
- #define BIOS_DATA_SEG 0x40
- #define TIMER_DATA 0x6c
- #define TICKS_PER_DAY 0x01800B0L
-
- long getticks(void);
- char *csinh(double, double);
-
- main()
-
- {
- double x, y, realarg, imagarg;
- char *vlurtnd;
- int ctr;
- long start, end;
-
- start = getticks();
- printf("\n BEGIN AT CLOCK = %ld", start);
-
- realarg = 3.0;
- imagarg = -2.0;
-
- for(ctr = 1; ctr <= 5000; ++ctr)
-
- {
- vlurtnd = csinh(realarg, imagarg);
- x = *(double*)(vlurtnd);
- y = *((double*)(vlurtnd + 8));
-
- free((void*)vlurtnd);
- }
-
- end = getticks();
-
- printf("\n\n REAL RESULT = %lG", x);
- printf(" IMAG RESULT = %lG", y);
-
- printf("\n END AT CLOCK = %ld", end);
- printf("\n\n ELAPSED TICKS = %ld", end - start);
- }
-
- char *csinh(double realarg, double imagarg)
-
- {
- double outreal, outimag, *pntrreal, *pntrimag;
- char *rtnvlu;
-
- rtnvlu = (char *)malloc(16);
-
- outreal = cos(imagarg) * sinh(realarg);
- outimag = sin(imagarg) * cosh(realarg);
-
- pntrreal = (double*)rtnvlu;
- pntrimag = (double*)(rtnvlu + 8);
-
- *pntrreal = outreal;
- *pntrimag = outimag;
-
- return rtnvlu;
- }
-
-